package arithmetic.LeetCode;

/**
 * @author jiangfeng on 2023/12/23
 */
public class maxProduct {
    public static void main(String[] args) {
//        System.out.println(new Solution().maxProduct(new int[]{2,3,-2,4}));
        System.out.println(new Solution().maxProduct(new int[]{-2}));
    }

    static class Solution{
        public int maxProduct(int[] nums) {
            // 维护一个最大值数组，一个最小值数组。 dp[i] 表示目前为止最大、最小乘积
            int[] max = new int[nums.length];
            int[] min = new int[nums.length];
            max[0]=nums[0];
            min[0]=nums[0];
            for(int i=1;i<nums.length;i++){
                max[i] = Math.max(nums[i],Math.max(max[i-1]*nums[i],min[i-1]*nums[i]));
                min[i] =  Math.min(nums[i],Math.min(max[i-1]*nums[i],min[i-1]*nums[i]));
            }
            int result = 0;
            for(int i:max){
                result=Math.max(i,result);
            }
            return result;
        }
    }
}
